#include <bits/stdc++.h>
using namespace std;

// #define ONLINE_JUDGE

#ifndef ONLINE_JUDGE
#define dbg(x...)                             \
	{                                         \
		cerr << "\033[32;1m" << #x << " -> "; \
		err(x);                               \
	}
void err()
{
	cerr << "\033[39;0m" << endl;
}
template <typename T, typename... A>
void err(T a, A... x)
{
	cerr << a << ' ';
	err(x...);
}
#else
#define dbg(...)
#endif

typedef long long LL;

const int N = 1005;

const int dx[] = {0, 0, 1, -1},
dy[] = {1, -1, 0, 0};

int f[N][N];

bool ob[N][N];

int n, m;

int tot;
inline bool inbound(int l, int r, int x)
{
	return l <= x && x <= r;
}

void output(int x, int y)
{
	int s = x * m + y;
	for (int i=0; i<n; ++i)
	{
		for (int j=0; j<m; ++j)
		{
			printf("%3d", f[s][i*m+j]);
		}
		putchar('\n');
	}
}

void outputSpecial(int x, int y)
{
	int s = x * m + y;
	// if (x == 0 && y == 1)
	// {
	// 	int i = 1 * n + 1;
	// 	int tx = i / n, ty = i % n;
	// 	// dbg(x, y, tx, ty, abs(x-tx)+abs(y-ty), f)
	// }
	for (int i=0; i<tot; ++i)
	{
		int tx = i / m, ty = i % m;
		
		if (ty == 0) 
			putchar('\n');

		if (ob[tx][ty]) 
			printf("x ");
		else if (x == tx && y == ty)
			printf("s ");
		else if (abs(x-tx) + abs(y-ty) == f[s][i])
			printf("  ");
		else
			printf("* ");
	}
	puts("\n=======");
}

int main(int argc, char const *argv[])
{
	scanf("%d%d", &n, &m);
	int N = max(n, m);
	for (int i = -N; i < N; ++i)
		for (int j = -N; j < N; ++j)
		{
			int x = 2 * i + j, y = i - 2 * j;

			if (inbound(0, n - 1, x) && inbound(0, m - 1, y))
				ob[x][y] = true;
		}

	for (int i=0; i<n; ++i)
	{
		for (int j=0; j<m; ++j)
			printf("%d ", ob[i][j]);
		putchar('\n');
	}
	// return 0;

	tot = n * m;
	for (int i=0; i<tot; ++i)
		memset(f[i], 0x3f3f3f3f, 4 * tot);
	

	for (int i=0; i<tot; ++i)
	{
		int x = i / m, y = i % m;
		if (ob[x][y]) continue;
		for (int r=0; r<4; ++r)
		{
			int tx = x + dx[r], ty = y + dy[r];

			if (inbound(0, n-1, tx) && inbound(0, m-1, ty))
			{
				int u = i, v = tx * m + ty;
				if (ob[tx][ty]) continue;
				f[u][v] = f[v][u] = 1;
			}
		}
		f[i][i] = 0;
	}

	for (int k=0; k<tot; ++k)
		for (int i=0; i<tot; ++i)
			for (int j=0; j<tot; ++j)
			{
				f[i][j] = min(f[i][j], f[i][k] + f[k][j]);
			}
	for (int i=0; i<tot; ++i)
		for (int j=0; j<tot; ++j)
		{
			if (f[i][j] > 1e9) f[i][j] = -1;
		}

	output(1, 10);
	// output(0, 1);
	// output(0, 2);
	// output(1, 1);
	// output(1, 2);
	// // dbg(f[1][ 	1*n+1]);

	outputSpecial(1, 10);
	// outputSpecial(0, 2);
	// outputSpecial(1, 1);
	// outputSpecial(1, 2);
	return 0;
}